﻿using System;
using System.ServiceModel;
using Itau.IM.Carimbador.Contract;
using Itau.IM.Carimbador.Implementation;
using Itau.IM.Carimbador.Interface;
using Itau.IM.Common.Aop.Factory;

namespace Itau.IM.Carimbador.Facade
{
    /// <summary>
    /// Fachada para execução do serviço Dummy
    /// </summary>
    public class TransferPriceFacade : ITransferPrice
    {
        #region Atributos

        private ITransferPrice _transferPrice;

        #endregion Atributos

        #region Métodos

        /// <summary>
        /// Construtor
        /// </summary>
        public TransferPriceFacade()
        {
            //_transferPrice = new ProxyFactory().Create(new TransferPriceImpl(), "TransferPrice") as ITransferPrice;
            _transferPrice = new TransferPriceImpl();
        }

        /// <summary>
        /// Método responsável pela obtenção de pontos de uma curva regular, sem prazo específico
        /// </summary>
        /// <param name="request_">Requisição</param>
        /// <returns>Resposta</returns>
        public ConsultarRegularSemPrazoResponse ConsultarRegularSemPrazo(ConsultarRegularSemPrazoRequest request_)
        {
            try
            {
                return this._transferPrice.ConsultarRegularSemPrazo(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarRegularSemPrazo'", e);
            }
        }

        /// <summary>
        /// Método responsável pela obtenção um único pontos de uma curva regular, com prazo específico
        /// </summary>
        /// <param name="request_">Requisição</param>
        /// <returns>Resposta</returns>
        public ConsultarRegularComPrazoResponse ConsultarRegularComPrazo(ConsultarRegularComPrazoRequest request_)
        {
            try
            {
                return this._transferPrice.ConsultarRegularComPrazo(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarRegularComPrazo'", e);
            }
        }


        /// <summary>
        /// Método responsável pela obtenção de pontos de uma curva irregular
        /// </summary>
        /// <param name="request_">Requisição</param>
        /// <returns>Resposta</returns>
        public ConsultarIrregularResponse ConsultarIrregular(ConsultarIrregularRequest request_)
        {
            try
            {
                return this._transferPrice.ConsultarIrregular(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarRegularComPrazo'", e);
            }
        }

        /// <summary>
        /// Método responsável pela obtenção de pontos de uma curva regular, sem prazo específico
        /// </summary>
        /// <param name="request_">Requisição</param>
        /// <returns>Resposta</returns>
        public ConsultarRegularSemPrazoResponse ConsultarRegularSemPrazoGet(string request_)
        {
            try
            {
                return this._transferPrice.ConsultarRegularSemPrazoGet(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarRegularSemPrazoGet'", e);
            }
        }

        /// <summary>
        /// Método responsável pela obtenção um único pontos de uma curva regular, com prazo específico
        /// </summary>
        /// <param name="request_">Requisição</param>
        /// <returns>Resposta</returns>
        public ConsultarRegularComPrazoResponse ConsultarRegularComPrazoGet(string request_)
        {
            try
            {
                return this._transferPrice.ConsultarRegularComPrazoGet(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarRegularComPrazoGet'", e);
            }
        }


        public ConsultarTaxaTransferPriceResponse ConsultarTaxaTransferPrice(ConsultarTaxaTransferPriceRequest request_)
        {
            try
            {
                return this._transferPrice.ConsultarTaxaTransferPrice(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarTaxaTransferPrice'", e);
            }
        }

        public ConsultarTaxaTransferPriceResponse ConsultarTaxaTransferPriceGet(string request_)
        {
            try
            {
                return this._transferPrice.ConsultarTaxaTransferPriceGet(request_);
            }
            catch (Exception e)
            {
                throw new Exception("Facade: Erro durante a execução do método 'ConsultarTaxaTransferPriceGet'", e);
            }
        }

        #endregion Métodos

    }
}